/*
    统一调用模板类——JSON
    - 实现了一个统一接口，针对不同内容的JSON文件进行读写
    - T --> JSON_string
    - JSON_File --> T
    - T --> json-file
 */

#ifndef JSON_TEMPLATE_H
#define JSON_TEMPLATE_H

#include "../json/json_handler.h"

#include <memory>

// 为C++11添加简易版make_unique（C++14及以上可忽略）
namespace std {
    template<typename T, typename... Args>
    unique_ptr<T> make_unique(Args&&... args) {
        return unique_ptr<T>(new T(std::forward<Args>(args)...));
    }
}

namespace equip_system
{
template <typename T, typename Handler>
class JsonTemplate
{
private:
    std::unique_ptr<Handler> handler;

public:
    /*
        构造
    */
    JsonTemplate() : handler(std::make_unique<Handler>() ) {}

    /*
        T --> JSON_string
    */
    std::string serialize(const T &data, vector<std::string> &param)
    {
        return handler->serialize(data,param);
    }

    /*
        JSON_File --> T
        JSON_File --> JSON_string
    */
    bool read(const std::string &filename, T &data)
    {
        std::string out;
        return handler->read(filename, data, out);
    }

    /*
        T --> json-file
    */
    bool write(const std::string &filename, const T &data)
    {
        std::string out;
        return handler->write(filename, data, out);
    }
};

}; // namespace equip_system

#endif // JSON_TEMPLATE_H
